package com.dangdang.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.dangdang.domain.CartItem;
import com.dangdang.domain.Product;
import com.dangdang.domain.User;

/**
 * 购物车业务层实现类
 * 
 * @author Wangpeihu
 * @team [Never give up]
 * @since JDK1.6(建议)
 * @date 2010-1-28
 */
public class CartServiceImpl implements CartService {

	private CatalogService cs = ServiceFactory.getCatalogService();

	/** 一辆购物车 */
	private Map<Integer, CartItem> carts = new HashMap<Integer, CartItem>();

	private User user;

	/**
	 * 
	 * @param user
	 */
	public CartServiceImpl(User user) {
		this.user = user;
		this.carts = new HashMap<Integer, CartItem>();
	}

	/**
	 * 将选购的商品添加到购物车的小票中
	 * 
	 * @param productId
	 * @return
	 */
	public boolean addItem(Integer productId) {
		// If the product exists...
		if (!carts.containsKey(productId)) {
			CartItem item = new CartItem();
			Product product = cs.findProductById(productId);
			item.setProduct(product);
			item.setNumber(1);
			item.setStatus(true);
			carts.put(product.getId(), item);
			return true;
		}
		return false;
	}

	/**
	 * 更新所购买的商品的数量
	 * 
	 * @param productId
	 * @param num
	 * @return
	 */
	public boolean updateNumber(Integer productId, int num) {
		if (carts.containsKey(productId)) {
			CartItem item = carts.get(productId);
			item.setNumber(num);
			return true;
		}
		return false;
	}

	/**
	 * 将所购买的商品标识为删除状态
	 * 
	 * @param productId
	 * @return
	 */
	public boolean drop(Integer productId) {
		if (carts.containsKey(productId)) {
			CartItem item = carts.get(productId);
			// false：代表被删除
			item.setStatus(false);
			return true;
		}
		return false;
	}

	/**
	 * 将删除的商品标识为购买状态
	 * 
	 * @param productId
	 * @return
	 */
	public boolean recovery(Integer productId) {
		if (carts.containsKey(productId)) {
			CartItem item = carts.get(productId);
			// ture代表好
			item.setStatus(true);
			return true;
		}
		return false;
	}

	/**
	 * 清空购物车
	 */
	public void clear() {
		carts.clear();
	}

	/**
	 * 查看该购物车是否有货
	 * 
	 * @return
	 */
	public boolean isEmpty() {
		return carts.isEmpty();
	}

	/**
	 * 获得购物车内所有的条目信息
	 * 
	 * @return
	 */
	public List<CartItem> getCartItems() {
		ArrayList<CartItem> list = new ArrayList<CartItem>();
		Iterator<Integer> it = carts.keySet().iterator();
		while (it.hasNext()) {
			CartItem item = carts.get(it.next());
			list.add(item);
		}
		return list;

	}

	/**
	 * 获得购物车里商品的总价
	 */
	public double getTotalPrice() {
		double totalPrice = 0;
		Iterator<Integer> it = carts.keySet().iterator();
		while (it.hasNext()) {
			CartItem item = carts.get(it.next());
			if (item.isStatus()) {
				totalPrice += item.getProduct().getFixedPrice()
						* item.getNumber();
			}
		}
		return totalPrice;
	}

	/**
	 * 
	 */
	public double getDangPrice() {
		double totalPrice = 0;
		Iterator<Integer> it = carts.keySet().iterator();
		while (it.hasNext()) {
			CartItem item = carts.get(it.next());
			if (item.isStatus()) {
				totalPrice += item.getProduct().getDangPrice()
						* item.getNumber();
			}
		}
		return totalPrice;
	}

	/**
	 * 获得该购物车所属的User
	 */
	public User getUser() {
		return user;
	}

}
